package util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtil {

    // 第一个参数src表示要获取拼音的字符串，而第二个参数fullSpell表示是否全拼
    // 若第二个参数为true，得到字符串的全拼，而参数为false，得到字符串的拼音首字母
    // 针对“数据结构”这个字符串,若fullSpell为true,得到'shujujiegou',而为false，得到'sjjg'
    public static String get(String src, boolean fullSpell){
        if(src == null || src.trim().length() == 0) return null;

        // 针对 Pinyin4j 进行配置, u 使用 v 表示
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        // 遍历字符串中的每一个字符，针对每个字符分别进行转换,转换得到的拼音拼接到StringBuilder字符串中
        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < src.length(); i++) {
            char ch = src.charAt(i);
            String[] tmp = new String[0];
            try {
                tmp = PinyinHelper.toHanyuPinyinStringArray(ch,format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }

            // 当输入的字符没有对应的汉语拼音,就会转换失败,得到空的数组
            // 输入的英文字符转换失败，保留初始字符，直接添加至StringBuilder字符串中
            if(tmp == null || tmp.length == 0){
                stringBuilder.append(ch);
            } else if (fullSpell){
                // 转换结果非空，并且获取完整全拼
                stringBuilder.append(tmp[0]);
            }else {
                // 转换结果非空，并且获取拼音首字母
                stringBuilder.append(tmp[0].charAt(0));
            }
        }
        return stringBuilder.toString();
    }
}
